package com.zxl.designpattern.structure.flyweight;

import java.util.HashMap;
import java.util.Map;



/**
 * 享元模式--享元工厂
 * @author zxl
 * @version 1.0
 * @date 2024/11/18 10:54
 */
public class FormatFactory {
    // 享元池，存储已创建的享元对象
    private static final Map<String, TextFormat> formats = new HashMap<>();

    /**
     * 获取享元对象。首次获取不存在则创建，然后放入享元池。
     * 后续获取时直接从享元池中获取。
     * @param formatType
     * @return
     */
    public static TextFormat getFormat(String formatType) {
        TextFormat format = formats.get(formatType);
        
        if (format == null) {
            switch (formatType.toLowerCase()) {
                case "bold":
                    format = new BoldFormat();
                    break;
                case "italic":
                    format = new ItalicFormat();
                    break;
                default:
                    throw new IllegalArgumentException("不支持的格式类型: " + formatType);
            }
            formats.put(formatType, format);
            System.out.println("创建新的格式: " + formatType);
        }
        return format;
    }
}